home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / BASIC / 2905.ZIP / QWEZ.ZIP / SCRLRAND.BAS < prev    next >
BASIC Source File  |  1993-06-01  |  17KB  |  365 lines

  1. '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2. '!!!        ** [ READ THIS ] ** !!!!!!!! ** [ READ THIS ] **             !!!
  3. '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  4. ' DATA FILE, RANDDATA.DAT REQUIRED FOR THIS PROGRAM -- SEE SCRLFILE.DOC
  5. '***************************************************************************
  6. '**** THIS PROGRAM MUST BE USED WITH ONE OF THE FOLLOWING LIBRARIES:    ****
  7. '***************************************************************************
  8. '**** For QB4.5 unenhanced version use QBUNEN.QLB                       ****
  9. '**** For BASIC 7.1 unenhanced version use PDSUNEN.QLB                  ****
  10. '**** For VBDOS 1.0 unenhanced version use VBUNEN.QLB                   ****
  11. '**** For QB4.50 enhanced version use QBALL.QLB or QBNER.QLB            ****
  12. '**** For BASIC 7.1 enhanced version use PDSALL.QLB or PDSNER.QLB       ****
  13. '**** For VBDOS 1.0 enhanced version use VBALL.QLB or VBNER.QLB         ****
  14. '**** Load QB, QBX, or VBDOS with the /L option and the correct library ****
  15. '***************************************************************************
  16. '                              INSTRUCTIONS
  17. '                              ------------
  18. '   1. MAKE SURE THE DATA FILE, RANDDATA.DAT, IS IN THE CURRENT
  19. '      DRIVE/DIRECTORY.  IF THE DATA FILE IS NOT AVAILABLE IT MAY BE
  20. '      MADE USING MAKERAND.BAS ( SEE SCRLFILE.DOC ).
  21. '   2. LOAD QUICKBASIC OR PDS WITH THE CORRECT LIBRARY. ( SEE ABOVE )
  22. '   3. LOAD SCRLRAND.BAS ( THIS PROGRAM ) INTO QB OR QBX.
  23. '   4. RUN THE PROGRAM. ( SHIFT F5 )
  24. '
  25. '          **** SEE SCRLFILE.DOC FOR ADDITIONAL INFORMATION ****
  26. '***************************************************************************
  27. DECLARE FUNCTION LBUTTON% ()
  28. DECLARE FUNCTION MOUSEINWIND% (W%)
  29. DECLARE FUNCTION MOUSEON% (ONOFF%)
  30. DECLARE FUNCTION CHOICEBAR% (CH$(), TR%, LC%, WD%, ATTR%, HATTR%, EXIT$)
  31. DECLARE FUNCTION CHOICEWIND% (TITLE$, T$(), C$(), TR%, LC%, ATTR%, HATTR%, ESCEX%, BRDR%)
  32.  
  33. DIM CH$(3)
  34. CH$(1) = "ENTER=SELECT": CH$(2) = "ESC=EXIT": CH$(3) = "F1=FIND"
  35.  
  36. CALL SETWIND(1, 1, 7, 0, 15)           ' INITIALIZE WINDOW MEMORY.
  37. CALL INPTINIT(1, 1, 0, 1, 1)          ' INITIALIZE INPUT MEMORY.
  38. JUNK% = MOUSEON%(1)                   ' INITIALIZE MOUSE AND TURN IT "ON".
  39. CALL MAKEWIND(1, "", 1, 1, 80, 25, 112, 2)
  40. CALL CUROFF
  41.  
  42. DO
  43.   ANS$ = ""
  44.   CALL GETANS("Color or Mono (C/M) ?", "CM", ANS$, 100, 100, 143, 0, 11)
  45.   IF ANS$ = "C" THEN COL% = 31 ELSE COL% = 112
  46. LOOP WHILE ANS$ = CHR$(27)
  47.  
  48. CALL BOXW(21, 10, 59, 3, 2)
  49.  
  50. IF COL% = 31 THEN A% = 31 ELSE A% = 15
  51. CALL INFOLINE(25, 2, 78, A%)              ' TURN INFO-LINE ON.
  52.  
  53. '---------------------------------------------------------------------------
  54. ' DESCRIPTION WINDOW
  55.  
  56. CALL MAKEWIND(2, "@Virtual scroll window template - Using random file access", 2, 100, 74, 8, COL%, 111)
  57.  CALL PRINTW("This scroll window scrolls through a random access file.    It holds 5", 1, 2)
  58.  CALL PRINTW("records at a time.   This eliminates the need to place the entire file", 2, 2)
  59.  CALL PRINTW("in memory, minimizing precious string space usage.   This template may", 3, 2)
  60.  CALL PRINTW("be used with binary or indexed files with slight modification.", 4, 2)
  61. '---------------------------------------------------------------------------
  62. ' MAKE THE WINDOW TO BE USED AS THE SCROLL WINDOW.
  63. ' INITIALIZE VARIABLES
  64.  
  65. FILEPOINTER = 1          ' START AT RECORD# 1.
  66. RTRN% = 1                ' SCROLL BAR OVER 1ST ENTRY.
  67. ROWS% = 5                ' INTERIOR ROWS IN SCROLL WINDOW.
  68.                          ' IF WINDOW HAS A TITLE BOX ROWS% = NUMBER OF
  69.                          ' WINDOW ROWS - 4 ELSE ROWS% = NUMBER OF WINDOW
  70.                          ' ROWS - 2.
  71. DIM A$(ROWS%)            ' DIMENSION ARRAY TO HOLD SCROLL WINDOW ENTRIES.
  72. FC% = 1                  ' THE FIRST CHARACTER FOR ENTRIES IN SCROLL WINDOW
  73.                          ' PRINTS IN THE FIRST COLUMN IN THE WINDOW.
  74.                          ' WITH VIRTUAL SCROLL WINDOWS THE CHARACTER IN THE
  75.                          ' 1st COLUMN IS NOT ALWAYS THE 1st CHARACTER.
  76. DATAFILE$ = "RANDDATA.DAT"   ' DATA FILE
  77. FILENUM% = 1                 ' USE FILE NUMBER 1
  78. DIM DUMMY$(0)                ' SCROLL WINDOW REQUIRES THIS FOR INFOLINE
  79.  
  80. TYPE RECORDTYPE          ' PLACE YOUR OWN TYPE HERE
  81.   MARK AS STRING * 1
  82.   NAM AS STRING * 25
  83.   ADD1 AS STRING * 30
  84.   CITY AS STRING * 25
  85.   STATE AS STRING * 10
  86.   ZIP AS STRING * 9
  87. END TYPE
  88. DIM RECORD AS RECORDTYPE
  89.  
  90. RECORDLEN% = LEN(RECORD)
  91.  
  92. CALL MAKEWIND(20, "", 12, 100, 74, ROWS% + 4, COL%, 111) ' SCROLL WINDOW
  93.  
  94. ' SCROLL WINDOW'S TITLE
  95. TITLE$ = "NAME                     ADDRESS                       CITY                     STATE     ZIP"
  96.  
  97. ' --------------------------------------------------------------------------
  98.  ' FIND THE NUMBER OF RECORDS IN THE FILE BASED ON THE RECORD LENGTH.
  99.  
  100. OPEN DATAFILE$ FOR RANDOM AS FILENUM% LEN = RECORDLEN%
  101.   MAXENTRIES = LOF(1) / RECORDLEN%
  102. CLOSE
  103.  
  104. OPEN DATAFILE$ FOR RANDOM AS FILENUM% LEN = RECORDLEN%
  105.  
  106. RK% = CHOICEBAR%(CH$(), 23, 5, 70, 112, 0, "VIEW")
  107.  
  108. GETFILE:
  109.   GOSUB GETRECORDS
  110.  
  111. ' ---------------------------------------------------------------------------
  112.  ' PRINT THE INSTRUCTIONS AND PLACE THE RECORDS IN THE SCROLL WINDOW.
  113.  
  114.   CALL PRINTW("[ (+) = Mark  ]■■■■■■■■■[ (-) = Unmark ]", 6, 100)
  115. MAKESCRL:
  116.   IF ENTRIES% < 1 THEN CALL PRINTW("No entries..", 1, 100): END
  117.  
  118.   ' KIND$ REPRESENTS TYPE OF SCROLL WINDOW ON ENTRY AND THE MARKED ENTRIES
  119.   ' ON EXIT.
  120.   ' SET KIND$ TO "M" TO MAKE A "MARKED" SCROLL WINDOW.
  121.  
  122.   CALL INFOFIXED("     Up/Down/Left/Right -- Pgup/Pgdn -- Home/End -- Tab/Shift Tab -- Mouse")
  123.   KIND$ = "M"         ' THIS IS A "MARK" SCROLL WINDOW.
  124.  
  125.  
  126.   ' SET EXIT CRITERIA AND MARKED ENTRIES.
  127.  
  128.   CALL B4SCRL("MCT1REXO", SCROLLMARK$, 0, NOREFRESH%)
  129.   NOREFRESH% = 0
  130.  
  131.   ' ENTER THE SCROLL WINDOW
  132.   CALL SCRLWIND(A$(), DUMMY$(), TITLE$, ENTRIES%, KIND$, RTRN%, LI%, FC%, RK%, 0, 1, 0)
  133.  
  134.   CALL INFOFIXED("")                           ' ERASE THE FIXED INFO STRING.
  135.   IF RK% = 200 OR RK% = 14 OR RK% = 15 THEN    ' Mouse pressed out of scroll window
  136.         CALL PRINTW("─────────", 6, 100)
  137.         RK% = CHOICEBAR%(CH$(), 23, 5, 70, 112, 0, "1EOT")
  138.         SELECT CASE RK%
  139.           CASE 1: RK% = 13             ' simulate ENTER
  140.           CASE -1, 3: RK% = 1          ' simulate F1
  141.           CASE 2: RK% = 27             ' simulate ESC
  142.           CASE ELSE: NOREFRESH% = 1    ' Mouse pressed out of a selection
  143.         END SELECT
  144.      'loop if lbutton is pressed with mouse out of scroll window
  145.      DO: LOOP WHILE LBUTTON% = 1 AND MOUSEINWIND%(20) = 0
  146.      CALL PRINTW("■■■■■■■■■", 6, 100)
  147.   END IF
  148. '----------------------------------------------------------------------------
  149.  ' RK% = 50 IF THE + OR INSERT (MARK) KEY CAUSED THE EXIT.
  150.  ' RK% = 55 IF THE - OR DELETE (UN-MARK) KEY CAUSED THE EXIT.
  151.  ' KIND$ HOLDS THE CODED STRING FOR MARKED ITEMS ON EXIT.
  152.  ' SET SCROLLMARK$ TO KIND$ FOR NEXT ENTRY INTO SCROLL WINDOW.
  153.  ' NOTE: REQUIRES A FIELD IN THE DATABASE RESERVED FOR THE MARK FLAG.
  154.  
  155.  SELECT CASE RK%
  156.    '( KIND$ RETURNED BY SCRLWIND -- REPRESENTS MARKED ITEMS )
  157.  
  158.    CASE 50, 55       '+/INSERT FOR MARK OR -/DELETE FOR UNMARK CAUSED EXIT
  159.  
  160.      IF ONLAST% = 1 THEN                          ' MOVE FILEPOINTER TO
  161.         FILEPOINTER = FILEPOINTER - ENTRIES% + 1  ' 1ST RECORD IN SCROLL
  162.         ONLAST% = 0                               ' WINDOW.
  163.      END IF
  164.  
  165.     IF KIND$ = "" THEN                         'NOTHING MARKED
  166.       RECORD.MARK = " ": SCROLLMARK$ = SPACE$(ENTRIES%)
  167.     ELSE                                       ' AT LEAST ONE ENTRY MARKED
  168.       RECORD.MARK = MID$(KIND$, RTRN%, 1): SCROLLMARK$ = KIND$
  169.     END IF
  170.  
  171.     PUT 1, FILEPOINTER + RTRN% - 1, RECORD.MARK   ' PUT MARK FLAG IN CORRECT
  172.                                                   ' RECORD IN FILE.
  173.     RTRN% = RTRN% + 1                             ' ADVANCE TO NEXT RECORD.
  174.     IF RTRN% > ENTRIES% THEN RK% = 19: GOTO DOWN  ' ELSE ACT LIKE DOWN ARROW
  175. '---------------------------------------------------------------------------
  176.  ' THE ESC KEY CAUSED THE EXIT FROM THE SCROLL WINDOW
  177.  
  178.    CASE 27
  179.      CALL PRINTINFO(" Press Y to quit or N to continue.  Press ENTER to accept..")
  180.      ANS$ = "N"
  181.      CALL GETANS("Quit (Y/N) ", "YN", ANS$, 100, 100, 112, 15, 11)
  182.      IF ANS$ = "Y" THEN CLOSE : CLS : END
  183.      NOREFRESH% = 1
  184. '---------------------------------------------------------------------------
  185. ' THE ENTER KEY CAUSED THE EXIT ---- AN ENTRY WAS SELECTED.
  186. ' USING MULTINPT THE RECORD COULB BE EDITED HERE.
  187.  
  188.    CASE 13
  189.      IF ONLAST% = 1 THEN                          ' SET FILE POINTER TO THE
  190.         FILEPOINTER = FILEPOINTER - ENTRIES% + 1  ' 1ST RECORD IN WINDOW.
  191.         ONLAST% = 0
  192.      END IF
  193.      '( SELECTED RECORD = FILEPOINTER + RTRN% - 1 )
  194.  
  195.      CALL PRINTINFO(" Press any key to continue.......... ")
  196.      CALL GETANS("Selection was record number:" + STR$(FILEPOINTER + RTRN% - 1), "", "", 8, 100, 15, 0, 11)
  197.      NOREFRESH% = 1
  198. '---------------------------------------------------------------------------
  199. ' THE HOME KEY CAUSED THE EXIT
  200.  
  201.  CASE 30
  202.     FC% = 1                     ' START WITH 1ST CHARACTER IN 1ST COLUMN
  203.     FILEPOINTER = 1             ' START AT RECORD 1
  204.     RTRN% = 1                   ' SCROLL BAR ON 1ST RECORD IN SCROLL WINDOW.
  205.     GOSUB GETRECORDS            ' FILL A$() WITH THE RECORDS
  206.  
  207. '---------------------------------------------------------------------------
  208. ' THE END KEY CAUSED THE EXIT
  209.  
  210.  CASE 35
  211.     FC% = 1                                  ' 1ST CHARACTER IN 1ST COLUMN
  212.     FILEPOINTER = MAXENTRIES - ROWS% + 1     ' LAST "ROWS%" OF RECORDS
  213.     IF FILEPOINTER < 1 THEN FILEPOINTER = 1  ' ADJUST IF < 1
  214.     GOSUB GETRECORDS                         ' GET RECORDS TO FILL WINDOW
  215.     RTRN% = ENTRIES%                         ' SCROLL BAR ON LAST RECORD
  216.  
  217. '---------------------------------------------------------------------------
  218. ' THE F1 KEY ( FIND ) CAUSED THE EXIT
  219.  
  220.  CASE 1
  221.    DO
  222.       CALL DOSOUND
  223.       RTRN$ = ""
  224.       CALL PRINTINFO(" Input a record number.  Press ENTER to accept or ESC to abort.")
  225.       CALL INPTWIND("   FIND RECORD NUMBER ( 1 TO" + STR$(MAXENTRIES) + " )  ", "0", 100, 100, 3, 112, 112, RTRN$, RKEY%, 2, 111)
  226.       REC = VAL(RTRN$)
  227.       ' CHECK FOR PROPER RANGE FOR INPUT
  228.     LOOP WHILE (REC < 1 OR REC > MAXENTRIES) AND RKEY% <> 27
  229.  
  230.     CALL RSTRINPT(1)                                 ' RESTORE INPUT WINDOW.
  231.     IF RKEY% = 27 THEN GOTO MAKESCRL                 ' ESC WAS PRESSED.
  232.  
  233. GOTREC:
  234.     IF ONLAST% = 1 THEN                              ' FILE POINTER TO
  235.         FILEPOINTER = FILEPOINTER - ENTRIES% + 1     ' 1ST RECORD IN WINDOW.
  236.           ONLAST% = 0
  237.     END IF
  238.  
  239.     FC% = 1                                     ' 1ST CHARACTER IN 1ST COLUMN.
  240.     OLDREC = FILEPOINTER                        ' SAVE THE OLD FILEPOINTER.
  241.     FILEPOINTER = REC                           ' SET FILEPOINTER TO ENTERED
  242.                                                 ' RECORD.
  243.  
  244.     IF REC <= ROWS% THEN                        ' RECORD = 1 TO ROWS%
  245.       RTRN% = REC                               ' SCROLL BAR ON ENTERED RECORD
  246.       FILEPOINTER = 1                           ' 1ST RECORD = 1ST WIND. ENTRY
  247.     ELSEIF REC > MAXENTRIES - ROWS% THEN        ' RECORD = MAXENTRIES - ROWS%
  248.       RTRN% = ROWS% - (MAXENTRIES - REC)        ' TO MAXENTRIES.
  249.       FILEPOINTER = MAXENTRIES - ROWS% + 1      ' JUST LIKE "END".
  250.     ELSEIF REC >= OLDREC AND REC <= OLDREC + ROWS% - 1 THEN
  251.       FILEPOINTER = OLDREC                      ' RECORD IN PRESENT WINDOW
  252.       RTRN% = (REC - OLDREC + 1)
  253.     ELSE                                     ' RECORD = ALL OTHERS.
  254.       RTRN% = 1                              ' SCROLL BAR ON 1ST WIND ENTRY.
  255.       FILEPOINTER = REC                      ' ENTRERED RECORD 1ST IN WIND.
  256.     END IF
  257.     GOSUB GETRECORDS                         ' GO GET CORRECT RECORDS
  258.  
  259. ' ---------------------------------------------------------------------------
  260. ' SCRLWIND EXIT WAS CAUSED BY ATTEMPT TO MOVE PAST THE END OF
  261. ' THE SCROLL WINDOW ( A$(ENTRIES%) ).  PROGRAM ALSO MOVES HERE IF
  262. ' Mark (+) /Un-mark (-)  WAS PRESSED ON THE LAST ENTRY IN THE SCROLL
  263. ' WINDOW.
  264.  
  265.  CASE 12, 19                                    ' SCROLLING PAST THE END OF
  266.                                                 ' LIST IN THE SCROLL WINDOW.
  267. DOWN:
  268.  
  269.     IF ONLAST% = 0 THEN                         ' IF FILE POINTER IS ON
  270.        FILEPOINTER = FILEPOINTER + ENTRIES% - 1 ' FIRST ENTRY IN THE SCROLL
  271.        ONLAST% = 1                              ' WINDOW MOVE IT TO THE
  272.     END IF                                      ' LAST ENTRY.
  273.       
  274.     IF LI% = ENTRIES% AND FILEPOINTER + 1 > MAXENTRIES THEN   ' END OF FILE?
  275.        RTRN% = ENTRIES%
  276.        CALL DOSOUND                             ' MAKE BEEP AND DO NOTHING
  277.        NOREFRESH% = 1
  278.     ELSE                                        ' NOT END OF FILE
  279.        IF ENTRIES% = ROWS% THEN
  280.           FILEPOINTER = FILEPOINTER + 1         ' INCREMENT FILEPOINTER
  281.           IF RK% = 12 THEN                                 ' PAGE DOWN
  282.              IF FILEPOINTER + ROWS% - 1 > MAXENTRIES THEN  ' END OF FILE?
  283.                 FILEPOINTER = MAXENTRIES - ROWS% + 1       ' JUST LIKE "END"
  284.              END IF
  285.              GOSUB GETRECORDS                     ' PUT RECORDS IN A$()
  286.           ELSE                                    ' MUST BE DOWN ARROW.
  287.              FOR X% = 1 TO ROWS% - 1              ' SHIFT SCROLL ENTRIES
  288.                 SWAP A$(X%), A$(X% + 1)           ' UP ONE.
  289.              NEXT
  290.              GET 1, FILEPOINTER, RECORD           ' GET NEW LAST ENTRY.
  291.              A$(ENTRIES%) = RECORD.NAM + RECORD.ADD1 + RECORD.CITY + RECORD.STATE + RECORD.ZIP
  292.  
  293.              'FIX STRING REPRESENTING "MARKED" ENTRIES
  294.              SCROLLMARK$ = RIGHT$(SCROLLMARK$, ENTRIES% - 1) + RECORD.MARK
  295.           END IF
  296.        END IF
  297.     END IF
  298.     RTRN% = ENTRIES%
  299. '----------------------------------------------------------------------------
  300. ' SCRLWIND EXIT WAS CAUSED BY AN ATTEMPT TO MOVE BEFORE THE FIRST
  301. ' ENTRY ( A$(START) ) IN THE SCROLL WINDOW.
  302.  
  303.  CASE 11, 16                                  ' SCROLLING BEFORE START OF
  304.                                               ' LIST IN SCROLL WINDOW
  305.  
  306.     IF ONLAST% = 1 THEN                        ' IF FILEPOINTER = LAST SCROLL
  307.       FILEPOINTER = FILEPOINTER - ENTRIES% + 1 ' WINDOW ENTRY SET TO FIRST.
  308.       ONLAST% = 0
  309.     END IF
  310.  
  311.     IF LI% = 1 AND FILEPOINTER = 1 THEN         ' FIRST RECORD IN FIRST ROW.
  312.       CALL DOSOUND                              ' CAN'T MOVE UP.
  313.       NOREFRESH% = 1
  314.     ELSE
  315.       IF ENTRIES% = ROWS% THEN
  316.          IF RK% = 11 THEN                       ' MUST BE PAGE UP.
  317.             FILEPOINTER = FILEPOINTER - ROWS%         ' MOVE UP ONE PAGE OF "RECORDS"
  318.             IF FILEPOINTER < 1 THEN FILEPOINTER = 1   ' BEFORE FIRST RECORD?
  319.             GOSUB GETRECORDS                          ' PUT RECORDS IN A$()
  320.          ELSE                                ' MUST BE UP ARROW.
  321.             FILEPOINTER = FILEPOINTER - 1    ' MOVE POINTER UP ONE IN FILE.
  322.             FOR X% = ROWS% TO 2 STEP -1      ' SHIFT RECORDS IF SCROLL LIST.
  323.                SWAP A$(X%), A$(X% - 1)
  324.             NEXT
  325.             GET 1, FILEPOINTER, RECORD       ' GET A NEW FIRST RECORD
  326.             A$(1) = RECORD.NAM + RECORD.ADD1 + RECORD.CITY + RECORD.STATE + RECORD.ZIP
  327.  
  328.             'FIX STRING REPRESENTING "MARKED" ENTRIES
  329.             SCROLLMARK$ = RECORD.MARK + LEFT$(SCROLLMARK$, ENTRIES% - 1)
  330.          END IF
  331.       END IF
  332.     END IF
  333.     LIN% = 1: RTRN% = 1
  334.  
  335.  END SELECT
  336.  GOTO MAKESCRL
  337.  
  338. '---------------------------------------------------------------------------
  339. ' READ RECORDS FROM THE FILE. READ UNTIL MAXIMUM NUMBER OF ENTRIES
  340. ' IN THE SCROLL WINDOWS ( ROWS% ) IS REACHED, OR UNTIL THE END
  341. ' OF FILE ( MAXENTRIES% ) IS REACHED.
  342.  
  343. GETRECORDS:
  344.   SCROLLMARK$ = SPACE$(ROWS%)        ' MAKE STRING TO REPRESENT "MARKED" ENTRIES.
  345.   ENTRIES% = 0                       ' ENTRIES IN SCROLL WINDOW.
  346.   WHILE ENTRIES% < ROWS% AND FILEPOINTER <= MAXENTRIES
  347.     ENTRIES% = ENTRIES% + 1          ' INCREMENT ENTRIES.
  348.     GET 1, FILEPOINTER, RECORD       ' GET RECORD FROM THE FILE
  349.     FILEPOINTER = FILEPOINTER + 1    ' MOVE TO NEXT RECORD
  350.  
  351.     ' MAKE AN ENTRY IN THE SCROLL WINDOW
  352.     A$(ENTRIES%) = RECORD.NAM + RECORD.ADD1 + RECORD.CITY + RECORD.STATE + RECORD.ZIP
  353.  
  354.     ' SET STRING REPRESENTING "MARKED" ENTRIES
  355.     MID$(SCROLLMARK$, ENTRIES%, 1) = RECORD.MARK
  356.   WEND
  357.   FILEPOINTER = FILEPOINTER - 1           ' ADJUST TO LAST RECORD IN SCROLL WINDOW.
  358.   ONLAST% = 1                             ' SET FLAG TO SHOW FILE POINTER IS
  359.                                           ' ON LAST RECORD IN SCROLL WINDOW.
  360.   SCROLLMARK$ = LEFT$(SCROLLMARK$, ENTRIES%)  ' MAKE IT THE CORRECT LENGTH
  361.                                               ' REQUIRED WHEN ENTRIES% < ROWS%
  362. RETURN
  363. '----------------------------------------------------------------------------
  364.  
  365.